package message_client

type Click struct {
	Intent string `json:"intent"`
	Url    string `json:"url"`
}

type GetuiNotification struct {
}

type GetuiTransmission struct {
}

type Notification struct {
	Title    string `json:"title"`
	Body     string `json:"body"`
	BigText  string `json:"bigText"`
	BigImage string `json:"bigImage"`
	Logo     string `json:"logo"`
	LogoUrl  string `json:"logoUrl"`
	RingName string `json:"ringName"`
	Click    *Click `json:"click"`
}

type Transmission struct {
	Title    string `json:"title"`
	Content  string `json:"content"`
	Payload  string `json:"payload"`
	RingName string `json:"ringName"`
}

type AppNotificationRequestParameter struct {
	Delay        bool               `json:"-"`
	SendTime     int64              `json:"-"`
	UserIds      []string           `json:"userIds"`
	ClientIds    []string           `json:"clientIds"`
	Notification *Notification      `json:"notification"`
	Getui        *GetuiNotification `json:"getui"`
}

type AppTransmissionRequestParameter struct {
	Delay        bool               `json:"-"`
	SendTime     int64              `json:"-"`
	UserIds      []string           `json:"userIds"`
	ClientIds    []string           `json:"clientIds"`
	Transmission *Transmission      `json:"transmission"`
	Getui        *GetuiTransmission `json:"getui"`
}

type DingtalkMessageRequest struct {
	Delay        bool     `json:"-"`
	SendTime     int64    `json:"-"`
	PhoneNumbers []string `json:"phoneNumbers"`
	Message      string   `json:"message"`
	AtAll        bool     `json:"atAll"`
}

type ExtendPlatformMessageRequest struct {
	Args string `json:"args"`
}

type InternalMessageRequestParameter struct {
	Delay      bool     `json:"-"`
	SendTime   int64    `json:"-"`
	UserIds    []string `json:"userIds"`
	FromUserId string   `json:"fromUserId"`
	Message    string   `json:"message"`
}

type MailRequestParameter struct {
	Delay          bool              `json:"-"`
	SendTime       int64             `json:"-"`
	To             []string          `json:"to"`
	Cc             []string          `json:"cc"`
	TemplateName   string            `json:"templateName"`
	TemplateParams map[string]string `json:"templateParams"`
}

type SmsRequestParameter struct {
	Delay          bool              `json:"-"`
	SendTime       int64             `json:"-"`
	PhoneNumbers   []string          `json:"phoneNumbers"`
	TemplateId     string            `json:"templateId"`
	TemplateParams map[string]string `json:"templateParams"`
}

type SendRequestParameter struct {
	RequestId             string                           `json:"requestId"`
	BusinessName          string                           `json:"businessName"`
	MessageTypes          []string                         `json:"messageTypes"`
	Delay                 bool                             `json:"delay"`
	SendTime              int64                            `json:"sendTime"`
	AppNotification       *AppNotificationRequestParameter `json:"appNotification,omitempty"`
	AppTransmission       *AppTransmissionRequestParameter `json:"appTransmission,omitempty"`
	Email                 *MailRequestParameter            `json:"email,omitempty"`
	InternalMessage       *InternalMessageRequestParameter `json:"internalMessage,omitempty"`
	Sms                   *SmsRequestParameter             `json:"sms,omitempty"`
	ExtendPlatformMessage *ExtendPlatformMessageRequest    `json:"extendPlatformMessage,omitempty"`
	DingtalkMessage       *DingtalkMessageRequest          `json:"dingtalkMessage,omitempty"`
}

type SendResult struct {
	Code             string `json:"code"`
	Description      string `json:"description"`
	BusinessTypeName string `json:"businessTypeName"`
	BizId            string `json:"bizId"`
}

type SendResults struct {
	Code      string                 `json:"code"`
	Message   string                 `json:"message"`
	RequestId string                 `json:"requestId"`
	ResultMap map[string]*SendResult `json:"resultMap"`
}

type Response struct {
	Code         string       `json:"code"`
	Description  string       `json:"description"`
	ResponseTime string       `json:"responseTime"`
	ResponseBody *SendResults `json:"responseBody"`
}
